<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use APY\DataGridBundle\Grid\Mapping as GRID;

/**
 * Agp\CoreBundle\Entity\Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\PostRepository")
 * 
 * @GRID\Source(columns="codPost, titulo, pessoa.nome, situacao, dtEntrada")
 */
class Post
{
    /**
     * @var integer $codPost
     *
     * @ORM\Column(name="cod_post", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * 
     * @GRID\Column(title="Código", type="text", size="5", primary=true, visible=false)
     */
    protected $codPost;

    /**
     * @var \DateTime $dtEntrada
     *
     * @ORM\Column(name="dt_entrada", type="datetime")
     * @GRID\Column(title="Data", type="datetime")
     */
    protected $dtEntrada;

    /**
     * @var \DateTime $dtTermino
     *
     * @ORM\Column(name="titulo", type="string", length=80)
     * @Assert\NotBlank
     * 
     * @GRID\Column(title="Título", type="text")
     */
    protected $titulo;
    
    /**
     * @var string $conteudo
     *
     * @ORM\Column(name="previo", type="text")
     * @Assert\NotBlank
     */
    protected $previo;
    
    /**
     * @var string $conteudo
     *
     * @ORM\Column(name="conteudo", type="text")
     * @Assert\NotBlank
     */
    protected $conteudo;

    /**
     * @ORM\ManyToOne(targetEntity="Agp\CoreBundle\Entity\Pessoa", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="cod_pessoa", referencedColumnName="cod_pessoa", onDelete="restrict", nullable=false)
     * @var object
     * 
     * @GRID\Column(field="pessoa.nome", title="Autor", type="text")
     */
    protected $pessoa;
    
    /**
     * @ORM\OneToMany(targetEntity="Agp\CoreBundle\Entity\PostComentario", cascade={"all"}, mappedBy="post")
     * @var arrayCollection
     */
    protected $comentarios;
    
    const SIT_ATIVO = 'Ativo';
    const SIT_INATIVO = 'Inativo';
    /**
     * @var string $situacao
     *
     * @ORM\Column(name="situacao", type="string", nullable=false)
     * 
     * @GRID\Column(title="Situação", type="text")
     */
    protected $situacao;
    
    /**
     * @var string $envioNotificacao
     *
     * @ORM\Column(name="envio_notificacao", type="boolean")
     */
    protected $envioNotificacao;
    
    public function __construct() {
        $this->comentarios = new ArrayCollection;
        $this->situacao = self::SIT_ATIVO;
        $this->dtEntrada = new \DateTime;
    }
    
    public function getCodPost() {
        return $this->codPost;
    }

    public function setCodPost($codPost) {
        $this->codPost = $codPost;
    }

    public function getDtEntrada() {
        return $this->dtEntrada;
    }

    public function setDtEntrada($dtEntrada) {
        $this->dtEntrada = $dtEntrada;
    }

    public function getTitulo() {
        return $this->titulo;
    }

    public function setTitulo($titulo) {
        $this->titulo = $titulo;
    }

    public function getConteudo() {
        return $this->conteudo;
    }
    
    public function getConteudoInicio(){
        if (strlen($this->conteudo) > 150){
            return substr($this->conteudo, 0, 150)."...";
        }else{
            return substr($this->conteudo, 0, 150);
        }
        
    }

    public function setConteudo($conteudo) {
        $this->conteudo = $conteudo;
    }

    public function getPessoa() {
        return $this->pessoa;
    }

    public function setPessoa($pessoa) {
        $this->pessoa = $pessoa;
    }

    public function getComentarios() {
        return $this->comentarios;
    }

    public function setComentarios($comentarios) {
        $this->comentarios = $comentarios;
    }
    
    public function addComentarios($comentario) {
        $this->comentarios[] = $comentario;
    }

    public function getSituacao() {
        return $this->situacao;
    }

    public function setSituacao($situacao) {
        $this->situacao = $situacao;
    }
    
    public static function getSituacaoList(){
        return array(self::SIT_ATIVO => self::SIT_ATIVO,
                     self::SIT_INATIVO => self::SIT_INATIVO);
    }
    
    public function isAtivo(){
        return ($this->situacao == self::SIT_ATIVO);

    }
    
    public function getEnvioNotificacao() {
        return $this->envioNotificacao;
    }

    public function setEnvioNotificacao($envioNotificacao) {
        $this->envioNotificacao = $envioNotificacao;
    }
    
    public function getPrevio() {
        return $this->previo;
    }

    public function setPrevio($previo) {
        $this->previo = $previo;
    }

}
